<?php
/**
 * Created by PhpStorm.
 * User: zhu_hbo
 * Date: 16/10/9
 * Time: 下午5:04
 */

/*
 * PHP 命名空间的实现受到其语言自身的动态特征的影响。因此，如果要将下面的代码转换到命名空间中，动态访问元素
 * 必须使用完全限定名称（包括命名空间前缀的类名称）。
 * 注意因为在动态的类名称、函数名称或常量名称中，限定名称和完全限定名称没有区别，
 * 因此其前导的反斜杠是不必要的。
 */
namespace namespacename;

class classname
{
    function __construct()
    {
        echo __METHOD__,"\n";
    }
}
function funcname()
{
    echo __FUNCTION__,"\n";
}
const constname = "namespaced";

include 'ns6.php';

echo "===== ns7 ====="."<p>";
$a = 'classname';
$obj = new $a; // prints classname::__construct
echo "<p>";
$b = 'funcname';
$b(); // prints funcname
echo "<p>";
echo constant('constname'), "\n"; // prints global
echo "<p><p>";

/* note that if using double quotes, "\\namespacename\\classname" must be used */
$a = '\namespacename\classname';
$obj = new $a; // prints namespacename\classname::__construct
echo "<p>";
$a = 'namespacename\classname';
$obj = new $a; // also prints namespacename\classname::__construct
echo "<p>";
$b = 'namespacename\funcname';
$b(); // prints namespacename\funcname
echo "<p>";
$b = '\namespacename\funcname';
$b(); // also prints namespacename\funcname
echo "<p>";
echo constant('\namespacename\constname'), "\n"; // prints namespaced
echo "<p>";
echo constant('namespacename\constname'), "\n"; // also prints namespaced

?>